package com.skyd.core.android;

import java.util.ArrayList;

import android.app.Activity;
import android.content.ContextWrapper;
import android.content.Intent;
import android.speech.RecognizerIntent;

/**
 * 提供调用语音输入（依赖VoiceSearch组件）的相关方法
 * @author SkyD
 *
 */
public class VoiceInput {
	/**
	 * 呼叫语音输入功能以获取用户通过语音输入的文本
	 * @param a 当前Activity对象，该对象应当已重写onActivityResult()函数以实现对返回结果的处理，可以在该函数中使用VoiceInput.GetInputString()方法获得输入文本
	 * @param tip 要在语音输入对话框中显示的提示信息
	 * @param requestCode 在返回输入结果时用于分辨结果对应目标的请求代码
	 * @param maxResult 最大返回结果数
	 */
	public static void Call(Activity a,String tip,int maxResult,int requestCode)
	{
		Intent intent = new Intent(
				RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
		intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
				RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
		intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
				tip);
		intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, maxResult);
		a.startActivityForResult(intent, requestCode);
	}
	
	/**
	 * 呼叫语音输入功能以获取用户通过语音输入的文本
	 * @param a 当前Activity对象，该对象应当已重写onActivityResult()函数以实现对返回结果的处理，可以在该函数中使用VoiceInput.GetInputString()方法获得输入文本
	 * @param tipResID 要在语音输入对话框中显示的提示信息对应的资源ID
	 * @param requestCode 在返回输入结果时用于分辨结果对应目标的请求代码
	 * @param maxResult 最大返回结果数
	 */
	public static void Call(Activity a,int tipResID,int maxResult,int requestCode)
	{
		Call(a, a.getResources().getString(tipResID), maxResult, requestCode);
	}
	
	/**
	 * 此方法应在Activity里重写的onActivityResult()函数中执行，用于获取返回的输入文本
	 * @param data 返回的Intent对象
	 * @return 用户通过语音输入的文本
	 */
	public static ArrayList<String> GetInputStrings(Intent data)
	{
		return data.getStringArrayListExtra(
				RecognizerIntent.EXTRA_RESULTS);
	}
	
	/**
	 * 显示系统是否支持语音输入功能
	 * @param c 当前ContextWrapper对象，如Activity
	 * @return 系统是否支持语音输入功能
	 */
	public static boolean IsSupport(ContextWrapper c)
	{
		return c.getPackageManager().queryIntentActivities(new Intent(
				RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0).size()!=0;
	}
}
